package com.leyou.trade.service.impl;

import com.leyou.auth.utils.UserHolder;
import com.leyou.trade.entity.CartItem;
import com.leyou.trade.repository.CartItemRepository;
import com.leyou.trade.service.CartItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * @author 付
 */
@Service
public class CartItemServiceImpl implements CartItemService {
    @Autowired
    private CartItemRepository repository;
    @Autowired
    private MongoTemplate template;
    //新增商品到购物车
    @Override

    public void saveCartItem(CartItem cartItem) {
        // 获取用户id
        Long userId = UserHolder.getUser().getId();
        // 获取购物车数据的id
        String id = CartItem.generateId(userId, cartItem.getSkuId());
        // 尝试从mongoDB获取当前商品
        Optional<CartItem> optional = repository.findById(id);

        // 判断是否存在
        if (optional.isPresent()) {
            // 要新增的num
            Integer num = cartItem.getNum();
            // 存在，需要获取已经存在的商品的num
            cartItem = optional.get();
            // 与新购买的数量累加
            cartItem.setNum(num + cartItem.getNum());
        }
        // 填充id
        cartItem.setId(id);
        // 填充userId
        cartItem.setUserId(userId);
        // 时间
        cartItem.setUpdateTime(new Date());
        repository.save(cartItem);
    }
    //查询当前用户的购物车信息
    @Override
    public List<CartItem> queryCartList() {
        // 1.获取当前用户
        Long userId = UserHolder.getUser().getId();
        // 2.去查询
        return repository.findByUserIdOrderByUpdateTimeDesc(userId);
    }
    //更新购物车中商品的数量
    @Override
    public void updateCartNum(Long skuId, Integer num) {
        // 获取当前用户
        Long userId = UserHolder.getUser().getId();
        // 获取id
        String id = CartItem.generateId(userId, skuId);
        // .update({"_id": ""}, {$set: {num: xx}})
        template.update(CartItem.class)
                .matching(Query.query(Criteria.where("_id").is(id)))
                .apply(Update.update("num", num))
                .first();
    }


    //删除购物车商品
    @Override
    public void deleteCart(Long skuId) {
        //获取当前用户
        Long userid = UserHolder.getUser().getId();
        //获取id
        String id = CartItem.generateId(userid, skuId);
        //删除商品信息
        System.out.println("开始删除商品");
        repository.deleteById(id);
        System.out.println("删除成功商品");
    }
    //登录后购物车合并
    @Override
    public void savasAll(List<CartItem> itemList) {
        // 1.获取用户信息
        Long userId = UserHolder.getUser().getId();

    }


}
